AUTOMATIC1111 の Dreambooth の使い方
LoRA はLoRA の学習方法に移動した。
目次
- 概要
- 正則化画像の必要性
- Parameters
- Advanced
- Concepts
- A Few Dreambooth Observations and Tips, Leafier Closer Shots With the New Vae File (higher CFG)
- モデルの圧縮(脱水)
概要
2023 年4月現在、Dreambooth よりも LoRA(LoHa・LoCon)が使われている。性能が Dreambooth とほとんど変わらず、ファイルサイズは 1/10 以下のできるのがその理由だ。
正則化画像の必要性
sks guitar という Instance プロンプトで sks にギターの柄を学習させたいとする。このとき正則化画像がないと、sks にどのような内容が学習されるかわからない。sks と guitar と両方の語の概念が変更されるからだ。ここで guitar という Class プロンプトで正則化画像も使って学習させると、guitar という語の概念を修正できるので、sks に guitar 以外の概念を学習させられる。
prior-preservation loss
正則化画像は過学習と language-drift(語の意味の変化)を防ぐ効果がある。正則化画像がないと Instance prompt に含めた語の意味が変化してしまう。
AUTOMATIC1111 の Dreambooth Extension
Dreambooth は元のモデルが描けないオブジェクトも学習させて描けるようになる。ただし、追加して学習させられない。A というオブジェクトを学習させたモデルに B というオブジェクトを追加で学習させると A が影響を受けてあいまいになってしまう。なので Dreambooth で複数の概念を学習させるには同時に学習させなければならない。
Extension の Dreambooth は以下のように動作する。
- cpkt を Diffuser 形式に変換(変換されたモデルは models/dreambooth にある)
- ShivamShrirao の Dreambooth を実行
- cpkt に変換
インストール
Extensions としてインストールする。
webui-user.bat の 'set COMMANDLINE_ARGS=' の下の行に以下を追加して webui を再起動する。
set TORCH_COMMAND=pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
Create Model
ckpt を Diffuser 形式に変換する。
Parameters
Training Steps
ステップ数を指定する。Training Epochs より優先されるので、エポック数を使う場合は空欄にする。
Training Epochs
エポック数を指定する。Basic Dreambooth Guide によると、100 epoch(Instance 画像枚数 * 100)は必要になる。
Scale learning rate
GPU 数、gradient accumulation steps、バッチサイズで学習率をスケールするかどうか。
Warmup Steps
Center Crop
ターゲット解像度にリサイズする前にセンタークロップするかどうか。
Apply Horizontal Flip
画像をランダムに左右反転する。左右非対称のオブジェクトを学習させる場合はチェックを外す。
Concepts List
設定を書いた JSON ファイル。複数の概念を同時に学習させるときに使う。例。 設定できるのは instance prompt, class prompt, instance data dir, class data dir のみ。
Concepts タブの方がより詳細な設定ができる。
Advanced
Batch size
学習の並列実行数。
Class batch size
正則化画像の並列生成数。
Use CPU Only (SLOW)
CPU で計算する。必要メモリは 48 GB 以上。32 GB だとアプリをすべて終了させないとスワッピングが起こる。8bit Adam と同時に使えない。
Use 8bit Adam
チェックを入れると、精度は悪化するが VRAM を節約できる。
Mixed Precision bf16
bf16 は fp16 より指数のビットを多く割り当てたもの。fp16 よりディープニューラルネットワークをトレーニングするのに向いているらしい。しかし実行できるハードウェアは限られている。
Memory Attention
Comparison of speed and VRAM of different attention optimizations #230 によると xformers と flash_attention はメモリ使用量に大差がない(150MB 差)ので、flash_attention を使用する理由がない。
- default:最も早いが、VRAM 使用量が多い
- xformers:速度、VRAM 使用量ともに普通
- flash_attention:最も遅いが、VRAM 使用量が最も少ない
Don't cache latents
VAE の出力をキャッシュしない設定。チェックすると VRAM が節約できる。
Train Text Encoder
Text Encoder も同時に学習させると顔の品質が上がる。チェックを外すと VRAM が節約できる。
Train EMA
最終イテレーションで過学習になるのを防ぐために、指数移動平均(exponential moving average weight)を使う。品質が上がるが学習時に VRAM を余計に使用する。
Prior Loss Weight
正則化画像の loss の重み。通常は1を指定する。
Pad Tokens
75 トークンになるようにプロンプト埋める。
gradient checkpointing
速度は遅くなるが VRAM を節約するオプション。
Concepts
Instance prompt
画像生成時に呼び出すときに使う語を含んだプロンプト。呼び出すときに使う語は1トークンでモデルで使われてないものがいい。たとえば shs sts scs cpc coc cic msm nen usu ici lvl。複雑なプロンプトを入れてはいけない。複雑なプロンプトを入れてしまうと、Class prompt を設定しても語の意味が変化(language-drift)してしまう。キャラの場合 shs girl 等になる。
[filewords] を入れると、Textual Inversion や Hypernetwork でやるように、画像ファイル名の txt ファイルに書かれたプロンプトを使う。
Instance prompt は prior preservation を行う場合にのみ必要になる。
Class prompt
正則化画像を説明するプロンプト。プロンプトはモデルが認識できるものでないと意味がない。Instance prompt が shs girl の場合、Class prompt は girl になる。
[filewords] を入れると、Textual Inversion や Hypernetwork でやるように、画像ファイル名の txt ファイルに書かれたプロンプトを使う。
prior preservation を行わないなら空白でいい。
Instance prompt と class prompt の例
Training objects #19では Instance prompt に "sks guiter"、class prompt に "guiter"、を入力して学習させた例がある。この例では sks にギターの柄のみが学習されている。
DiffusersベースのDreamboothの精度をさらに上げる(Windows対応、VRAM 12GB)#学習用画像の準備で学習用画像と正則化画像との例が見れる。
Classification dataset directory
正則化画像(Class prompt で説明されている画像)を入れておくディレクトリ。Class prompt が入力されていて、このディレクトリの欄が空白の場合は /models/dreambooth/MODELNAME/classifiers/ に画像を生成して使用する。
Existing Prompt Contents
[filewords] を使う場合に使う。[filewords] に含まれるコンテンツ内容を指定する。
Instance Prompt と Class Prompt とは制約がある。Instance Prompt は常に Instance Token と Class Token とがセットでなければならない。Class Prompt には Instance Token が入っていてはならない。Existing Prompt Contents は キャプションファイルに Instance Token と Class Token とが入っているかどうかで、キャプションファイルの内容を加工してプロンプトとして使う。
Description
キャプションファイルに Class Token がある場合は、Class Token の前に Instance Token を挿入して Instance Prompt として使う。Class Prompt はそのまま使う。
Instance Token + Description
Instance Token の後ろに Class Token を挿入したものを Instance Prompt として使う。Class Prompt は Instance Token を Class Token に置き換えたものを使う。
Class Token + Description
Class Token の前に Instance Token を挿入して Instance Prompt として使う。Class Prompt はそのまま使う。
Instance Token + Class Token + Description
そのまま Instance Prompt に使う。Class Prompt は Instance Token を削除して使う。
コード
Instance Token
画像生成時に呼び出すときに使う語のみを指定する。画像生成時に呼び出すときに使う語が sls なら sls のみを指定する。a photo of sls や sls dog 等は間違い。Instance prompt に [filewords] が含まれている時のみ機能する。
Class Token
Instance token と同じだが、こちらは複数のタグを指定できる。class prompt に [filewords] が含まれている時のみ機能する。
Instance Token と Class Token の使い方
Instance token に sks、Class token に a woman, woman が指定されているとする。このとき [filewords] が a photo of a woman や a photo of a man and a woman だったとすると、学習時とサンプル画像作成時にそれぞれ a photo of sks woman と a photo of a man and sks woman に置換されて実行される。正則化画像生成時にはこの機能は働かない。
Total Number of Class/Reg Images
用意した正則化画像の 10 倍程度を指定する。prior preservation を行わないなら0を指定する。
学習の再開
Load Params をクリックすると、入力パラメーターを復元してくれる。
外部リンク
DiffusersベースのDreamBoothの精度をさらに上げる(Windows対応、VRAM 12GB)
Stable Diffusion Tutorial Part 1: Run Dreambooth in Gradient Notebooks
DreamBooth fine-tuning example
A Few Dreambooth Observations and Tips, Leafier Closer Shots With the New Vae File (higher CFG)
用意する画像
- 20 枚以上のアップ画像
- 4枚以上の胴+顔画像
- 4枚以上の全身画像
- 1枚以上の着座画像
注意すること
- 高解像の画像を集める
- 汎用性を上げるには、背景やライティング、髪型、表情など多くの画像を集める必要がある
- 魚眼レンズ効果を好まない場合は、魚眼レンズで撮影された画像は避ける
- シミやそばかすのある写真は加工する。そうしないと不自然な画像を生成するようになる
- クラス名は a で始める(a dog, a girl など)。そうすると複数のインスタンスを生成するのを防げる(dog という class prompt で学習させると、dog で複数の犬を描くようになる)
- 正則化画像は厳選する。a girl で生成しても a girl に関係のない画像が生成されるので、関係ない画像は除去する
避けたほうがいいこと
- ピンボケ画像は使わない
- 顔の近くに手がある画像は、手を学習してしまうので避けた方がいい
- 枠のある画像は、枠を学習してしまうので避ける
- ボケが強すぎる写真は避ける
そのほか
512x512 より大きいサイズでの出力を予定している場合、大きい解像度の画像(たとえば 640x640)の画像で学習させると品質が上がる。
60 枚の画像と、2,000 枚の "person" 正則化画像とで 6,000 ステップで学習させた場合、高い CFG を設定しても画像が破綻しづらくなった。
Dehydrate and Rehydrate ckpt model
Dreambooth で作成したモデルを1GB 未満に圧縮する。